home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / nt / emacssrc.zip / EMACSSRC.TAR / emacs-19.17 / lib-src / cvtmail.c < prev    next >
C/C++ Source or Header  |  1993-11-16  |  3KB  |  148 lines

  1. /* Copyright (C) 1985 Free Software Foundation
  2. This file is part of GNU Emacs.
  3.  
  4. GNU Emacs is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 1, or (at your option)
  7. any later version.
  8.  
  9. GNU Emacs is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. GNU General Public License for more details.
  13.  
  14. You should have received a copy of the GNU General Public License
  15. along with GNU Emacs; see the file COPYING.  If not, write to
  16. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17.  
  18. /* cvtmail:
  19.  * Program to convert oldstyle goslings emacs mail directories into
  20.  * gnu-rmail format.  Program expects a directory called Messages to
  21.  * exist in your home directory, containing individual mail messages in
  22.  * separate files in the standard gosling emacs mail reader format.
  23.  *
  24.  * Program takes one argument: an output file.  THis file will contain
  25.  * all the messages in Messages directory, in berkeley mail format.
  26.  * If no output file is mentioned, messages are put in ~/OMAIL.
  27.  *
  28.  * In order to get rmail to read the messages, the resulting file must
  29.  * be mv'ed to ~/mbox, and then have rmail invoked on them.
  30.  * 
  31.  * Author: Larry Kolodney, 1985
  32.  
  33.  * RMS, 2 Sept 85: Removed fix maximums on file name sizes.
  34.  */
  35.  
  36.  
  37. #include <stdio.h>
  38.  
  39.  
  40. main (argc, argv)
  41.      int argc;
  42.      char *argv[];
  43. {
  44.   char *hd;
  45.   char *md;
  46.   char *mdd;
  47.   char *mfile;
  48.   char *cf;
  49.   int cflen;
  50.   FILE *mddf;
  51.   FILE *mfilef;
  52.   FILE *cff;
  53.   char pre[10], post[100];
  54.   char name[14];
  55.   int c;
  56.  
  57.   hd = (char *) getenv ("HOME");
  58.  
  59.   md = (char *) xmalloc (strlen (hd) + 10);
  60.   strcpy (md, hd);
  61.   strcat (md, "/Messages");
  62.  
  63.   mdd = (char *) xmalloc (strlen (md) + 11);
  64.   strcpy (mdd, md);
  65.   strcat (mdd, "/Directory");
  66.  
  67.   cflen = 100;
  68.   cf = (char *) xmalloc (cflen);
  69.  
  70.   mddf = fopen (mdd, "r");
  71.   if (argc > 1)
  72.     mfilef = fopen (argv[1], "w");
  73.   else
  74.     {
  75.       mfile = (char *) xmalloc (strlen (hd) + 7);
  76.       strcpy (mfile, hd);
  77.       strcat (mfile, "/OMAIL");
  78.       mfilef = fopen (mfile, "w");
  79.     }
  80.   skip_to_lf (mddf);
  81.   while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF)
  82.     {
  83.       if (cflen < strlen (md) + strlen (name) + 2)
  84.     {
  85.       cflen = strlen (md) + strlen (name) + 2;
  86.       cf = (char *) xrealloc (cf, cflen);
  87.     }
  88.       strcpy (cf, md);
  89.       strcat (cf,"/");
  90.       strcat (cf, name);
  91.       cff = fopen (cf, "r");
  92.       while ((c = getc(cff)) != EOF)
  93.     putc (c, mfilef);
  94.       putc ('\n', mfilef);
  95.       skip_to_lf (mddf);
  96.      fclose (cff);
  97.     }
  98.   fclose (mddf);
  99.   fclose (mfilef);    
  100.   return 0;
  101. }
  102.  
  103. skip_to_lf (stream)
  104.      FILE *stream;
  105. {
  106.   register int c;
  107.   while ((c = getc(stream)) != '\n')
  108.     ;
  109. }
  110.  
  111. int
  112. xmalloc (size)
  113.      int size;
  114. {
  115.   int result = malloc (size);
  116.   if (!result)
  117.     fatal ("virtual memory exhausted", 0);
  118.   return result;
  119. }
  120.  
  121. int
  122. xrealloc (ptr, size)
  123.      char *ptr;
  124.      int size;
  125. {
  126.   int result = realloc (ptr, size);
  127.   if (!result)
  128.     fatal ("virtual memory exhausted");
  129.   return result;
  130. }
  131.  
  132. /* Print error message and exit.  */
  133.  
  134. fatal (s1, s2)
  135.      char *s1, *s2;
  136. {
  137.   error (s1, s2);
  138.   exit (1);
  139. }
  140.  
  141. error (s1, s2)
  142.      char *s1, *s2;
  143. {
  144.   printf ("cvtmail: ");
  145.   printf (s1, s2);
  146.   printf ("\n");
  147. }
  148.